1 L’expérience dont sont issues les données

Au cours de la période allant du 14 février 2014 au 9 mars 2014, dans le cadre de sa thèse sous la direction de Eric Gressier-Soudan, Viviane Gal a réalisé 67 expériences expériences au près de 24 individus. L’objectif de la thèse en question est de permettre l’établissement d’une cartographie des émotions à partir de biosignaux et d’observations. Il est donc nécessaire de réaliser des mesures qui permettent de poser une classification associant les signaux et des états émotionnels. Ces mesures ont été réalisées au cours d’expériences mettant les participants aux prises avec différents média dont on peut supposer qu’elles suscitent chez eux un certain nombre d’émotions. Avec les mesures en question, l’objectif est de décrire ces émotions à l’aide d’outils statistiques, graphiques et autres algorithmes d’apprentissage.

1.1 Description de l’expérience

Durant chaque expérience, différentes tâches sont proposées aux participants : - Regarder un film : une succession d’images et d’extraits de films - Un test de concentration / méditation en utilisant les ondes cérébrales - Une expérience à base de sensations fortes, de stress et d’“ambiance de peur” - jouer à un jeu de stratégie pendant une durée de 20 minutes

Chaque expérimentation permet la capture de données de différents types (physiologiques, images, réponses). Les données physiologiques, mesurées à intervalle de temps régulier (31 millisecondes) consistent en un certain nombre de mesures réalisées par le biais de capteurs sur un individu pendant l’expérience. Les données physiologiques mesurées sont : 1. la température cutanée (T°) en degré celcius 2. la fréquence cardiaque (FC) en battement par minute 3. l’activité electrodermale (GSR) en microsiemens 4. la respiration (FR) en pourcentage de déformation du thorax.

1.2 Les appareils de mesure

Différents éléments ont été utilisés pour l’expérience : -3 capteurs sans fil, -1 convertisseur analogique numérique, -1 logiciel de capture.

Tout ces appareils/logiciels sont fournis par la société TEA. Les capteurs font partie de la gamme T-Sens. Nous allons maintenant les décrire plus en détail.

1.2.1 Le capteur sans fil “CFM” (réf. C2030)

Selon les spécifications fournies par le constructeur, il s’agit d’un “module à transmission sans fil pour la mesure de la fréquence cardiaque grâce à une ceinture thoracique”1. Voir image

Image du capteur CFM

Le tableau suivant est aussi fourni dans le document :

Caractéristiques du capteur :

Caractéristique Valeur
Etalonnage Pas d’étalonnage
Unité BPM
Plage mes. 10 – 220 BPM
Fréquence 16Hz
Résolution 1 BPM
Compatibilité Polar Non codé ou équivalent

1.2.2 Le capteur sans fil “GSR + T°” (réf. C2034)

Toujours selon le constructeur, il s’agit d’un “module à transmission sans fil combinant à la fois la mesure de la conductivité électrodermale et de la température cutanée” - voir image . Il mesure l’activité electrodermale et la température à la surface de la peau grâce à “deux électrodes [qui] se fixent à l’extrémité de deux doigts”2. En réalité, afin de ne pas gêner le participant dans ses mouvements, les expérimentateurs ont décidé - avec l’accord du fabriquant - de faire la mesure aux doigts de pied. L’objectif concernant la mesure de la conductivité électrodermale est de mesurer l’intensité du courant électrique à la surface de la peau, ce qui est généralement vu comme une bonne approximation de la transpiration.

Image du capteur GSR


Caractéristiques du capteur :

Caractéristique GSR
Nombre de voies 1 1
Etalonnage Pas d’étalonnage Pas d’étalonnage
Unité µS (Siemens) °C
Fréquence 32Hz
Résolution 16 Bits 0.05°C
Plage de mesure 0 -30µS -40°C à 120°C
Linéarité N/A 0.5°C
Précision N/A 0.5°C
Caractéristiques électriques :
Alimentation Accumulateur 190mAh
Caractéristiques mécaniques :
Dimensions 52mm x 25mm x 14mm
Longueur câbles + électrodes 200mm
Poids 20g
Conditions d’utilisation
0°C à 40°C
Humidité < 60%

1.2.3 Le capteur sans fil “Respirations” (réf. C2033)

le capteur est un “module à transmission sans fil pour la mesure des mouvements thoraciques ou abdominaux. Le module (ceinture inclue) fournit des informations permettant d’analyser le rythme respiratoire et l’amplitude des respirations”3. Voir image

Image du capteur de respiration

Caractéristiques du capteur :

Caractéristique Valeur
Nombre de voies 1
Etalonnage Pas d’étalonnage
Unité % (déformation)
Fréquence 32Hz
Résolution 0.01%
Caractéristiques électriques :
Alimentation Accumulateur 190mAh
Autonomie 8h
Temps de chargement 3h
Caractéristiques mécaniques :
Dimensions 52mm x 25mm x 14mm
Poids 20g
Longueur ceinture 1m
Plage de mesure 0-75%
Allongement maximal 70mm (75%)
Conditions d’utilisation :
0°C à 40°C
Humidité < 60%

1.3 Les données mesurées

1.3.1 La température cutanée

C’est la température à la surface du corps, prise par le biais d’un capteur aux orteils (pieds nus). Le fabriquant a expliqué lors d’une conversation avec Viviane Gal que cette température est bien influencée par la température du corps mais aussi par la température environnante. Il sera nécessaire de procéder à des mesures complémentaires pour mesurer l’impact théorique de la température ambiante sur la température fournie par le capteur et d’évaluer leur influence sur les mesures obtenues.

1.3.2 La respiration

La réspiration est mesurée par une ceinture abdominale sur laquelle est disposé un capteur mesurant la nombre de battement par minute. Là encore, lors de l’expérience, certains effets parasites ont pu perturber la bonne mesure de la respiration. En effet, la ceinture se place autour de l’abdomen et se serre à l’aide de crans. Or, il n’y a pas eu ni vérification sur le cran choisi, ni mesure de la circonférence de l’abdomen. Cela remet en question la possiblité de faire des comparaisons entre individus. En effet, si la ceinture était très serrée pour une personne par rapport à une autre, le même mouvement de l’abdomen pourrait ne pas donner la même mesure. Il est donc important de faire des mesures complémentaires pour vérifier l’influence de ce phénomène.

1.3.3 La fréquence cardiaque

La fréquence cardiaque est mesurée par une ceinture abdominale qui “sonde” la fréquence cardiaque par le biais d’un capteur.

1.3.4 L’activité electrodermale

L’activité electrodermale mesure l’insensité du courant à la surface de la peau. Elle donne une approximation de la transpiration d’une personne. La prise de mesure au pied doit là aussi amener à réfléchir à la pertinence des mesures. La transpiration au pied est-elle pertinente dans l’exercice en question ?

2 Les données brutes

Nous avons reçu de Viviane Gal un fichier par expérience. Ce fichier est un tableau au format “csv” comportant 5 colonnes : - la date au format “J/M/AAAA H:Mn:S.m” (J : jour, M : mois, A : année, H : heure, Mn : minutes, S : secondes, m : millisecondes) - la respiration : décimal positif ou négatif, 3 chiffres après la virgule - l’activité électrodermale : décimal positif ou négatif, 3 chiffres après la virgule - la température : décimal positif, 3 chiffres après la virgule - la fréquence cardiaque : entier positif

La figure 1 représente les premières lignes des données pour l’expérience AB.

exemple d’un tableau de données reçu

Les fichiers qui nous ont été donnés pour le moment sont au nombre de 10. Le nom de chaque fichier est une concaténation des initiales de la personne ayant fait le test avec un numéro si la personne a fait plusieurs expériences et avec le terme “SurEchantillonHF”. Par exemple, pour l’individu A.B., le fichier sera “AB_SurEchantillonHF.csv”.

2.1 Modification “à la main”

Pour pouvoir importer les données de manière simple et “automatisée”, il faut uniformiser le contenu des fichiers. Par exemple, il manque les noms des variables dans certains fichiers, nous avons donc créé “à la main” des nouveaux fichiers avec le nom des variables inséré dans la première ligne. Nous avons ajouté des dates factices lorsqu’elle manquaient en “copiant-collant” les dates à partir du fichier “AB”(l’important étant que les intervalles de temps soit de 9 ms).

Le nom de ces fichiers est le nom du fichier original avec le suffixe “_header" avant le format.

3 Importation, vérification et nettoyage des données sous ‘R’

Nous avons décidé de traiter les données sous le logiciel ‘R’ très pratique pour gérer des données au format csv, qui a surtout comme avantage : - d’être, ainsi que ces bibliothèques, sous licence libre (généralement GPL-2 ou 34, - d’avoir de bonnes bibliothèques pour les algorithmes d’apprentissage, de réseaux de neurones, etc., - d’avoir de bonnes bibliothèques de modélisations graphiques (notamment ggplot2, très flexible)

3.1 Bibliothèques requises pour le travail sous ‘R’

Loading required package: knitr
Loading required package: plyr
Loading required package: ggplot2
Loading required package: reshape2
Loading required package: scatterplot3d
Loading required package: kohonen
Loading required package: class
Loading required package: MASS

3.2 Importation des données

3.2.1 L’objet choisi pour l’analyse sous R : le data frame

Les données qui sont traitées sous le logiciel “R” ont été mises sous la forme d’un data frame. Les data frames sont de simples tables de valeurs où chaque colonne correspond à un suite de valeur d’une variable d’un type donné (entier, booléén, chaîne de caractère,…) et chaque ligne a un n-upplet (une instance) de chacune des variables. Chaque colonne a de plus un nom et chaque ligne peut aussi en avoir un.

Dans cette partie, nous avons créé autant de “data frame” qu’il y a d’expériences réalisées (donc 10). Dans chaque data frame, une ligne correspond à un instant d’une expérience et chaque colonne indique les différentes mesures.

Nous utilisons une fonction load.file pour charger les données en mémoire dans des data frames (dont le nom sera data. concaté aux initiales de l’individu, par exemple data.AB pour l’expérience avec l’utilisateur A.B.)

3.3 Tranformation des données (nettoyage, mises en forme, décomposition, marquage)

chargement des données au format numérique (sauf 1ère colonne au format “date”, POSIX). Les noms des variables sont : -date, -respiration, -activite.electrodermale, -temperature, -frequence.cardiaque

3.4 Vérification des données

Dimension des data frames :

Data frame dimension
“AB” 48803 x 7
“DA” 27622 x 7
“CW” 48804 x 7
“FS1” 49518 x 7
“HL” 48762 x 7
“LM” 48719 x 7
“PCo” 48608 x 7
“PCo2” 27047 x 7
“PCo3” 11787 x 7
“ST” 48775 x 7

Représentation des 5 premières données pour l’expérience AB pour exemple :

[1] "       date           respiration   activite.electrodermale   temperature   frequence.cardiaque"
[2] "-------------------- ------------  ------------------------  ------------  --------------------"
[3] "2014-03-06 15:19:29       -10.644                   -44.157        29.417                    74"
[4] "2014-03-06 15:19:29       -10.379                   -44.157        29.417                    74"
[5] "2014-03-06 15:19:29       -10.168                   -44.157        29.417                    74"
[6] "2014-03-06 15:19:29        -9.981                   -44.157        29.417                    74"
[7] "2014-03-06 15:19:29        -9.833                   -44.169        29.417                    74"
[8] "2014-03-06 15:19:29        -9.692                   -44.169        29.417                    74"

Y a-t-il des données manquantes ?

Data frame dimension
“AB” aucune
“DA” aucune
“CW” aucune
“FS1” aucune
“HL” aucune
“LM” aucune
“PCo” existe(s)
“PCo2” aucune
“PCo3” aucune
“ST” aucune

Il existe effectivement des données manquantes pour PCo :

     date respiration activite.electrodermale temperature
NA   <NA>          NA                      NA          NA
NA.1 <NA>          NA                      NA          NA
     frequence.cardiaque quart.temps  exp
NA                    NA        <NA> <NA>
NA.1                  NA        <NA> <NA>

A quelles lignes et quelle(s) colonne(s) ?

       row col
[1,] 22340   2
[2,] 22345   2

Vu qu’il ne s’agit que de deux données sur plus de 27000, nous proposons de copier la valeur précédente à la place de la donnée manquante.

#remplace la valeur manquante par la valeur précédente de la même colonne
data.PCo[l.na[1],ncol.1] <- data.PCo[l.na[1]-1,ncol.1]
data.PCo[l.na[2],ncol.2] <- data.PCo[l.na[2]-1,ncol.2]

4 Exploration graphique des données

Nous allons utiliser la bibliothèque ggplot25 développée par Hadley Wickham et Winston Chang et qui implémente la théorie de la “grammaire des graphiques” de Leland Wilkinson6 sous ‘R’

4.1 Représentations graphiques des variables par expériences

L’objectif principal est de se donner une idée de la distribution et de la dispersion des données. En particulier, nous voulons comparer les valeurs mesurées à celle annoncées par le constructeur.

Nous allons représenter les données par expérience en utilisant deux outils :

  • “Jitter” (qui, sur la base d’un simple histogramme, déplace aléatoirement - de manière uniforme - les données sur un segment horizontale de longueur prédeterminée) L’avantage de ce graphique est de permettre d’avoir une idée de la “superposition” des données. Par ailleurs, afin d’ajouter encore une meilleure vision de cette superposition, nous avons ajouter une transparence aux disques représentants chaque donnée. Ainsi, plus des données dans l’histogramme se superposent, plus la couleur des pixels du disque qui les “map” est foncée.

  • “Boxplot” ou “boîte à moustache”, c’est une manière beaucoup plus fréquente de représenter les données par le biais d’une représentation graphique de sa médiane et ses quartiles et des “outliers” ou données aberrantes.

4.1.1 respiration : “Boxplot” & “Jitter” graphs

Nous allons représenter dans deux graphiques de type “jitter” et “boxplot” les données mesurées pour la variable respiration (en ordonnée) pour l’ensemble des expériences (en abscisse).

Comme nous l’avons vu, le constructeur annonce des valeurs entre 0% et75%, or nous voyions que les données vont en tout de -20 à 20. Ces données ne semblent donc pas compatibles. Lors d’une discussion à ce propos avec des représentants du fabriquant des capteurs, Ceux-ci nous ont expliqué que les données négatives devaient être inversées. Mais il reste un autre problème : certaines expériences ont des valeurs à la fois positives et négatives (ce que montre la figure 5). Des analyses et tests supplémentaires sont donc nécessaires avant de pouvoir exploiter ces données. On peut aussi noter que l’expérience ‘LM’, les données sont pratiquement constantes pendant toute l’expérience. Ce que confirme le fait que sur rlength(data.LM$respiration), 46765 sont constantes. Comme les données sont au millième de %, cela ne peut s’expliquer que par un problème lors de la prise de mesure.

4.1.2 activité electrodermale : “Boxplot” & “Jitter” graphs

Comme nous l’avons déjà dit, la plage de valeur annoncée par le constructeur est 0-30 µS. Or nous voyions ici des valeurs allant de -30 à -50. Selon un représentant du fabriquant, cela pourrait être du à un décallage fortuit du à l’algorithme du logiciel utilisé pour capter les mesures. Selon lui, il faudrait décaller les données de +69. Cela semble assez cohérent avec nos observations. Par ailleurs, pour un certain nombre d’expériences, nous avons à nouveau une variation insuffisante qui laisse penser que certaines mesures n’ont pas fonctionné. En particulier ‘HL’ (une valeur unique : -48.936) et ‘ST’ (nombre de valeurs : 1) mais ‘DA’ est aussi douteux.

4.1.3 température: “Boxplot” & “Jitter” graphs

Concernant la température, on voit que la dispersion des données est généralement faible. Les spécifications du capteurs annoncent un spectre de mesure de -40°C à 120°C, avec une précision de 0.05°C. Les données sont toutes bien à l’intérieur de cette plage. On remarque en particulier sur le “box plot” que les données sont (à quelques “outliers” près) très rapprochées. Cela correspond ici à ce qui est attendu puisque la mesure au corps ne varie pas beaucoup. Ainsi, une étude récente a donné lieu à une mesure de la température d’une personne selon trois méthodes (buccale, anale et cutannée) et la variation moyenne de la température du corps humain est d’environ 1 degré7. Toujours dans cette étude, pour la température cutanée, la variation maximum est de 2 degrés environ. Seule l’expérience ‘AB’ propose une amplitude importante : 4r qui demandera une enquête plus appronfondie.

4.1.4 fréquence cardiaque : “Boxplot” & “Jitter” graphs

Enfin, concernant la mesure cardiaque, la plage de mesure annoncée est de 10 à 220 BPM avec une résolution de 1 BPM. Les données sont compatibles avec ces spécifications. Nous remarquons une plus grande variation de la fréquence cardiaque, ce qui là encore est en accord avec les résultats trouvés par ailleurs. D’une personne à l’autre, d’un moment à l’autre, les variations des battements par minute peuvent être importantes (un sportif peut ainsi réduire son rythme cardiaque par 2).

4.2 Représentations graphiques des données par expérience et par quart temps

Nous présentons rapidement un certain nombre de représentations graphiques complémentaires par expérience et par valeur. Nous avons là encore utilisé les graphiques de type “Jitter” avec de la transparence mais cette fois-ci en découpant les données par quart temps grâce à une donnée catégorielle afin d’avoir une idée de l’évolution dans le temps.

L’analyse de ces graphiques n’est pas encore terminée. Nous l’ajouterons au rapport final.

4.2.1 respiration : Jitter graphs

4.2.2 transpiration (activité electroderm.) : Jittergraphs

4.2.3 température : Jitter graphs

4.2.4 fréquence cardiaque : Jitter graphs

4.2.5 Nuage de points par expérience et par pair de variable

Pour finir, nous ajoutons les graphiques des “matrices de nuages de points” ou “scatter plots” permettent de représenter pour chaque expérience des couples de variables dans un plan. A l’intérieur d’une matrice, on trouve donc plusieurs nuages de points avec en abscisse une des quatres mesures (respiration, activité électrodermale, température, fréquence cardiaque) et en ordonnée une autres de ces quatres mesures, différente de celle choisie pour l’abscisse. Ainsi, pour l’expérience ‘AB’ (figure 13), le nuage de point situé en dessous du carré intitulé “respiration” dans la matrice scatter plot représente dans le plan l’ensemble des couples “respiration” et “activité electrodermale” pour chaque instant écoulé durant l’expérience.

Par ailleurs, en utilisant un dégradé de couleurs du jaune vers le rouge, nous avons représenté l’évolution dans le temps de ces couples : plus on approche de la fin de l’expérience, plus la couleur du point devient rouge.

4.2.5.1 Nuages de points par pair de variables (pour les données de type réels)

4.2.5.1.1 Pour AB :

4.2.5.1.2 Pour ST :

4.2.5.1.3 Pour LM :

4.2.5.1.4 Pour FS1 :

4.2.5.1.5 Pour PCo :

4.2.5.1.6 Pour PCo2 :

4.2.5.1.7 Pour PCo3 :

5 Conclusion :

Il semble qu’avant de pouvoir traiter les données, un certain nombre de tests doivent être réalisées. Par ailleurs, des questions doivent être posées au fabriquant des capteurs concernant la possiblite de devoir ajouter un “offset” aux mesures brutes. Il existe trop d’incertitude concernant la qualité des données mesurées pour pouvoir procéder à des analyses plus poussées (voir le document en annexe pour une tentativeppréliminaire). Nous sommes donc en contact avec des représentants de la société fabriquant les capteurs. Par ailleurs, nous avons prévu avec Viviane Gal début Septembre 2015 de procéder à un certain nombre de tests avec le matériel pour mieux comprendre les données reçues, les possibles anomalies et trancher concernant un certain nombre de questions (influence de la température ambiante, vérifer s’il y a peu avoir des problèmes de déconnexion…) qui se sont posées à nous dans l’exploration des données.


  1. Voir http://teaergo.com/site/sites/default/files/docs/TSens_CFM-cardio_FR_V1.8.pdf

  2. Voir http://teaergo.com/drupal/sites/default/files/docs/TSens_FSR_FR_V1.8.pdf

  3. Voir http://teaergo.com/drupal/sites/default/files/docs/TSens_Respi_FR_V1.8.pdf

  4. Voir http://www.r-project.org/Licenses pour plus de détails.

  5. Voir notamment http://cran.r-project.org/web/packages/ggplot2/ggplot2.pdf

  6. Voir http://www.springer.com/us/book/9780387245447

  7. Voir graphique page 282, http://www.altmedrev.com/publications/11/4/278.pdf